www.gusucode.com > VC++ SkinCtrls窗体常用控件换肤程序-源码程序 > VC++ SkinCtrls窗体常用控件换肤程序-源码程序/code/SkinCtrlTest/SkinCtrlTestDlg.cpp
// SkinCtrlTestDlg.cpp : implementation file // Download by http://www.NewXing.com #include "stdafx.h" #include "SkinCtrlTest.h" #include "SkinCtrlTestDlg.h" #include "proppage.h" #include "..\skinwindows\skinctrls.h" #include "..\skinwindows\skinctrlmgr.h" #include "..\skinwindows\skinbase.h" #include "..\shared\roundcorner.h" #include "..\shared\syscolors.h" #ifdef _DEBUG #define new DEBUG_NEW #undef THIS_FILE static char THIS_FILE[] = __FILE__; #endif // skin bitmaps UINT SCROLLALL[IM_LAST] = { IDB_SCROLL_HOT, IDB_SCROLL_COLD, IDB_SCROLL_COLD, IDB_SCROLL_DIS }; UINT BTNLEFT[IM_LAST] = { IDB_BTNLEFT_HOT, IDB_BTNLEFT_COLD, IDB_BTNLEFT_COLD, IDB_BTNLEFT_DIS }; UINT BTNMID[IM_LAST] = { IDB_BTNMID_HOT, IDB_BTNMID_COLD, IDB_BTNMID_COLD, IDB_BTNMID_DIS }; UINT BTNRIGHT[IM_LAST] = { IDB_BTNRIGHT_HOT, IDB_BTNRIGHT_COLD, IDB_BTNRIGHT_COLD, IDB_BTNRIGHT_DIS }; UINT BTNCLIPLEFT[IM_LAST] = { IDB_BTNCLIPLEFT_HOT, IDB_BTNCLIPLEFT_COLD, IDB_BTNCLIPLEFT_COLD, IDB_BTNCLIPLEFT_DIS }; UINT BTNCLIPRIGHT[IM_LAST] = { IDB_BTNCLIPRIGHT_HOT, IDB_BTNCLIPRIGHT_COLD, IDB_BTNCLIPRIGHT_COLD, IDB_BTNCLIPRIGHT_DIS }; UINT SPINUP[IM_LAST] = { IDB_SPINUP_HOT, IDB_SPINUP_COLD, IDB_SPINUP_COLD, IDB_SPINUP_DIS }; UINT SPINDOWN[IM_LAST] = { IDB_SPINDOWN_HOT, IDB_SPINDOWN_COLD, IDB_SPINDOWN_COLD, IDB_SPINDOWN_DIS }; UINT SPINRIGHT[IM_LAST] = { IDB_SPINRIGHT_HOT, IDB_SPINRIGHT_COLD, IDB_SPINRIGHT_COLD, IDB_SPINRIGHT_DIS }; UINT SPINLEFT[IM_LAST] = { IDB_SPINLEFT_HOT, IDB_SPINLEFT_COLD, IDB_SPINLEFT_COLD, IDB_SPINLEFT_DIS }; UINT PROGLEFT[IM_LAST] = { IDB_BTNLEFT_COLD, 0, 0, IDB_BTNLEFT_DIS }; UINT PROGMID[IM_LAST] = { IDB_BTNMID_COLD, 0, 0, IDB_BTNMID_DIS }; UINT PROGRIGHT[IM_LAST] = { IDB_BTNRIGHT_COLD, 0, 0, IDB_BTNRIGHT_DIS }; enum { UNSKINNED, DEFAULTSKIN, BITMAPSKIN, CUSTOMSKIN }; ///////////////////////////////////////////////////////////////////////////// // CSkinCtrlTestDlg dialog CSkinCtrlTestDlg::CSkinCtrlTestDlg(CWnd* pParent /*=NULL*/) : CDialog(CSkinCtrlTestDlg::IDD, pParent) { //{{AFX_DATA_INIT(CSkinCtrlTestDlg) m_nSkinOption = BITMAPSKIN; m_sEdit2 = _T("the quick brown fox\r\njumps over the lazy dog.\r\nthe quick brown fox\r\njumps over the lazy dog.\r\nthe quick brown fox\r\njumps over the lazy dog.\r\nthe quick brown fox\r\njumps over the lazy dog.\r\n"); m_sRichedit = m_sEdit2; //}}AFX_DATA_INIT // Note that LoadIcon does not require a subsequent DestroyIcon in Win32 m_hIcon = AfxGetApp()->LoadIcon(IDR_MAINFRAME); m_crBkgnd = GetSysColor(COLOR_3DFACE); } void CSkinCtrlTestDlg::DoDataExchange(CDataExchange* pDX) { CDialog::DoDataExchange(pDX); //{{AFX_DATA_MAP(CSkinCtrlTestDlg) DDX_Control(pDX, IDC_BUTTON3, m_btn3); DDX_Control(pDX, IDC_BUTTON4, m_btn4); DDX_Control(pDX, IDC_PROGRESS2, m_progressV); DDX_Control(pDX, IDC_COMBO2, m_combo); DDX_Control(pDX, IDC_PROGRESS1, m_progressH); DDX_Control(pDX, IDC_SCROLLBAR1, m_scrollbar); DDX_Control(pDX, IDC_LIST2, m_listbox); DDX_Control(pDX, IDC_TAB1, m_tab); DDX_Control(pDX, IDC_TREE1, m_tree); DDX_Control(pDX, IDC_LIST1, m_listctrl); DDX_Radio(pDX, IDC_UNSKINNED, m_nSkinOption); DDX_Text(pDX, IDC_EDIT2, m_sEdit2); DDX_Text(pDX, IDC_RICHEDIT1, m_sRichedit); //}}AFX_DATA_MAP } BEGIN_MESSAGE_MAP(CSkinCtrlTestDlg, CDialog) //{{AFX_MSG_MAP(CSkinCtrlTestDlg) ON_BN_CLICKED(IDC_BROWSE, OnBrowse) ON_BN_CLICKED(IDC_DEFAULTSKIN, OnChangeSkin) ON_WM_DRAWITEM() ON_WM_MEASUREITEM() ON_WM_COMPAREITEM() ON_BN_CLICKED(IDC_CHECK3, OnCheck3) ON_BN_CLICKED(IDC_SETCOLOR, OnSetcolor) ON_BN_CLICKED(IDC_BITMAPSKIN, OnChangeSkin) ON_BN_CLICKED(IDC_CUSTOMSKIN, OnChangeSkin) ON_BN_CLICKED(IDC_UNSKINNED, OnChangeSkin) ON_BN_CLICKED(IDC_PROPSHEET, OnPropsheet) //}}AFX_MSG_MAP END_MESSAGE_MAP() ///////////////////////////////////////////////////////////////////////////// // CSkinCtrlTestDlg message handlers BOOL CSkinCtrlTestDlg::OnInitDialog() { CDialog::OnInitDialog(); // Set the icon for this dialog. The framework does this automatically // when the application's main window is not a dialog SetIcon(m_hIcon, TRUE); // Set big icon SetIcon(m_hIcon, FALSE); // Set small icon // list ctrl m_listctrl.InsertColumn(0, "column1", LVCFMT_LEFT, 100); m_listctrl.InsertColumn(1, "column2", LVCFMT_LEFT, 100); m_listctrl.InsertColumn(2, "column3", LVCFMT_LEFT, 100); for (int nItem = 0; nItem < 30; nItem++) { CString sItem; sItem.Format("Item %d, 1", nItem + 1); int nIndex = m_listctrl.InsertItem(nItem, sItem); for (int nSubItem = 1; nSubItem < 3; nSubItem++) { sItem.Format("Item %d, %d", nItem + 1, nSubItem + 1); m_listctrl.SetItemText(nIndex, nSubItem, sItem); } } // tree ctrl for (nItem = 0; nItem < 10; nItem++) { CString sItem; sItem.Format("Item %d", nItem + 1); HTREEITEM hti = m_tree.InsertItem(sItem); sItem.Format("Item %d, 1", nItem + 1); HTREEITEM htiSub = m_tree.InsertItem(sItem, hti); sItem.Format("Item %d, 1, 1", nItem + 1); m_tree.InsertItem(sItem, htiSub); m_tree.Expand(hti, TVE_EXPAND); m_tree.Expand(htiSub, TVE_EXPAND); } // list/comboboxes for (nItem = 0; nItem < 10; nItem++) { CString sItem; sItem.Format("Item %d", nItem + 1); m_listbox.AddString(sItem); m_combo.AddString(sItem); } // progressctrl m_progressH.SetRange(0, 100); m_progressH.SetPos(40); m_progressV.SetRange(0, 100); m_progressV.SetPos(40); // tabctrl m_tab.InsertItem(0, "tab1"); m_tab.InsertItem(1, "tab2"); m_tab.InsertItem(2, "tab3"); // scrollbar m_scrollbar.SetScrollRange(0, 100); m_scrollbar.SetScrollPos(50); // radio/checkbtns ((CButton*)GetDlgItem(IDC_RADIO1))->SetCheck(1); ((CButton*)GetDlgItem(IDC_CHECK1))->SetCheck(1); ((CButton*)GetDlgItem(IDC_CHECK2))->SetCheck(1); ((CButton*)GetDlgItem(IDC_CHECK3))->SetCheck(1); // pushbuttons CSkinCtrlMgr::ModifyStyle(this, IDC_BUTTON1, 0, SKBS_CLIPRIGHT); CSkinCtrlMgr::ModifyStyle(this, IDC_BUTTON2, 0, SKBS_CLIPBOTH); CSkinCtrlMgr::ModifyStyle(this, IDC_BUTTON3, 0, SKBS_CLIPLEFT); m_btn4.SetIcon(AfxGetApp()->LoadIcon(IDR_MAINFRAME)); m_btn3.SetBitmap(::LoadBitmap(AfxGetApp()->m_hInstance, MAKEINTRESOURCE(IDB_BITMAP))); OnChangeSkin(); return TRUE; // return TRUE unless you set the focus to a control } void CSkinCtrlTestDlg::OnBrowse() { CFileDialog dlg(TRUE); dlg.DoModal(); } void CSkinCtrlTestDlg::OnChangeSkin() { UpdateData(); CSkinCtrlMgr::Reset(); CSkinCtrlMgr::SetColor(COLOR_PARENTBKGND, m_crBkgnd); switch (m_nSkinOption) { case UNSKINNED: CSkinCtrlMgr::EnableSkinDraw(FALSE); CSkinCtrlMgr::SetRenderer(NULL); break; case DEFAULTSKIN: CSkinCtrlMgr::SetRenderer(NULL); CSkinCtrlMgr::EnableSkinDraw(TRUE); break; case BITMAPSKIN: CSkinCtrlMgr::EnableSkinDraw(TRUE); CSkinCtrlMgr::SetRenderer(NULL); // load bitmap resources into skin CSkinCtrlMgr::SetControlBitmap(SKCB_SCROLLALL, SCROLLALL, 255); CSkinCtrlMgr::SetControlBitmap(SKCB_BUTTONLEFT, BTNLEFT, 255); CSkinCtrlMgr::SetControlBitmap(SKCB_BUTTONMIDDLE, BTNMID, 255); CSkinCtrlMgr::SetControlBitmap(SKCB_BUTTONRIGHT, BTNRIGHT, 255); CSkinCtrlMgr::SetControlBitmap(SKCB_HEADERLEFT, BTNLEFT, 255); CSkinCtrlMgr::SetControlBitmap(SKCB_HEADERMIDDLE, BTNMID, 255); CSkinCtrlMgr::SetControlBitmap(SKCB_HEADERRIGHT, BTNRIGHT, 255); CSkinCtrlMgr::SetControlBitmap(SKCB_PROGRESSLEFT, BTNLEFT, 255); CSkinCtrlMgr::SetControlBitmap(SKCB_PROGRESSMIDDLE, BTNMID, 255); CSkinCtrlMgr::SetControlBitmap(SKCB_PROGRESSRIGHT, BTNRIGHT, 255); CSkinCtrlMgr::SetControlBitmap(SKCB_SLIDERTHUMBHORZ, SCROLLALL, 255); CSkinCtrlMgr::SetControlBitmap(SKCB_SLIDERTHUMBVERT, SCROLLALL, 255); CSkinCtrlMgr::SetControlBitmap(SKCB_BUTTONCLIPLEFT, BTNCLIPLEFT, 255); CSkinCtrlMgr::SetControlBitmap(SKCB_BUTTONCLIPRIGHT, BTNCLIPRIGHT, 255); CSkinCtrlMgr::SetControlBitmap(SKCB_SPINUP, SPINUP, 255); CSkinCtrlMgr::SetControlBitmap(SKCB_SPINDOWN, SPINDOWN, 255); CSkinCtrlMgr::SetControlBitmap(SKCB_SPINRIGHT, SPINRIGHT, 255); CSkinCtrlMgr::SetControlBitmap(SKCB_SPINLEFT, SPINLEFT, 255); CSkinCtrlMgr::SetControlBitmap(SKCB_PROGRESSLEFT, PROGLEFT, 255); CSkinCtrlMgr::SetControlBitmap(SKCB_PROGRESSMIDDLE, PROGMID, 255); CSkinCtrlMgr::SetControlBitmap(SKCB_PROGRESSRIGHT, PROGRIGHT, 255); CSkinCtrlMgr::RedrawAll(); break; case CUSTOMSKIN: CSkinCtrlMgr::SetRenderer(this); CSkinCtrlMgr::EnableSkinDraw(TRUE); break; } CSkinCtrlMgr::RedrawAll(); } BOOL CSkinCtrlTestDlg::Draw3dEdge(CDC* pDC, LPRECT pRect, int nEdge, int nState, int nClipping) { COLORREF crTopLeft, crBottomRight; BOOL bHot = (nState == IM_HOT); switch (nEdge) { case SKCS_CLIENTEDGE: crTopLeft = ::GetSysColor(bHot ? COLOR_3DDKSHADOW : COLOR_3DSHADOW); crBottomRight = ::GetSysColor(bHot ? COLOR_3DHIGHLIGHT : COLOR_3DSHADOW); break; case SKCS_BTNEDGE: crTopLeft = ::GetSysColor(bHot ? COLOR_3DHIGHLIGHT : COLOR_3DSHADOW); crBottomRight = ::GetSysColor(bHot ? COLOR_3DDKSHADOW : COLOR_3DSHADOW); break; case SKCS_ETCHEDEDGE: crTopLeft = ::GetSysColor(COLOR_3DSHADOW); crBottomRight = ::GetSysColor(COLOR_3DSHADOW); break; case SKCS_NOEDGE: default: return FALSE; } pDC->Draw3dRect(pRect, crTopLeft, crBottomRight); return TRUE; } BOOL CSkinCtrlTestDlg::Draw3dRoundEdge(CDC* pDC, LPRECT pRect, int nEdge, int nState) { BOOL bHot = (nState == IM_HOT); DWORD dwStyle = RC_THIN; COLORREF crBkgnd = -1; switch (nEdge) { case SKCS_CLIENTEDGE: dwStyle |= bHot ? RC_DOWN : 0; crBkgnd = bHot ? -1 : ::GetSysColor(COLOR_3DSHADOW); break; case SKCS_BTNEDGE: dwStyle |= bHot ? RC_UP : 0; crBkgnd = bHot ? -1 : ::GetSysColor(COLOR_3DSHADOW); break; case SKCS_ETCHEDEDGE: crBkgnd = ::GetSysColor(COLOR_3DSHADOW); break; case SKCS_NOEDGE: default: return FALSE; } CRoundCorner::Draw(pDC, pRect, (pRect->right - pRect->left) / 2, RC_ALL, dwStyle, crBkgnd); return TRUE; } BOOL CSkinCtrlTestDlg::Draw3dRect(CDC* pDC, LPRECT pRect, int nEdge, int nState, COLORREF crBkgnd, int nClipping) { pDC->FillSolidRect(pRect, crBkgnd); Draw3dEdge(pDC, pRect, nEdge, nState, nClipping); return TRUE; } /* BOOL CSkinCtrlTestDlg::DrawScrollbarButton(CDC* pDC, LPRECT pRect, int nState) { return FALSE; } BOOL CSkinCtrlTestDlg::DrawScrollbarButtonArrow(CDC* pDC, LPRECT pRect, int nBar, BOOL bBack, int nState) { return FALSE; } BOOL CSkinCtrlTestDlg::DrawSpinButton(CDC* pDC, LPRECT pRect, int nState) { return FALSE; } BOOL CSkinCtrlTestDlg::DrawSpinButtonArrow(CDC* pDC, LPRECT pRect, int nBar, BOOL bBack, int nState) { return FALSE; } BOOL CSkinCtrlTestDlg::DrawPushButton(CDC* pDC, LPRECT pRect, int nState, BOOL bClipLeft, BOOL bClipRight) { return FALSE; } BOOL CSkinCtrlTestDlg::DrawPushButtonText(CDC* pDC, LPRECT pRect, int nState) { return FALSE; } BOOL CSkinCtrlTestDlg::DrawRadioButton(CDC* pDC, LPRECT pRect, int nCheckState, int nState) { return FALSE; } BOOL CSkinCtrlTestDlg::DrawCheckButton(CDC* pDC, LPRECT pRect, int nCheckState, int nState) { return FALSE; } */ void CSkinCtrlTestDlg::OnDrawItem(int nIDCtl, LPDRAWITEMSTRUCT lpDrawItemStruct) { if (nIDCtl == IDC_BUTTON1) { // fill background ::SetBkColor(lpDrawItemStruct->hDC, GetSysColor(COLOR_3DFACE)); ::ExtTextOut(lpDrawItemStruct->hDC, 0, 0, ETO_OPAQUE, &lpDrawItemStruct->rcItem, NULL, 0, NULL); // draw a small black square CRect rect(lpDrawItemStruct->rcItem); rect.DeflateRect(13, 6); if (lpDrawItemStruct->itemState & (ODS_CHECKED | ODS_SELECTED)) rect.OffsetRect(1, 1); ::SetBkColor(lpDrawItemStruct->hDC, 0); ::ExtTextOut(lpDrawItemStruct->hDC, rect.left, rect.top, ETO_OPAQUE, rect, NULL, 0, NULL); } } void CSkinCtrlTestDlg::OnMeasureItem(int nIDCtl, LPMEASUREITEMSTRUCT lpMeasureItemStruct) { // TODO: Add your message handler code here and/or call default //CDialog::OnMeasureItem(nIDCtl, lpMeasureItemStruct); } int CSkinCtrlTestDlg::OnCompareItem(int nIDCtl, LPCOMPAREITEMSTRUCT lpCompareItemStruct) { // TODO: Add your message handler code here and/or call default return 0;//CDialog::OnCompareItem(nIDCtl, lpCompareItemStruct); } void CSkinCtrlTestDlg::OnCheck3() { GetDlgItem(IDC_BUTTON4)->EnableWindow(((CButton*)GetDlgItem(IDC_CHECK3))->GetCheck()); } void CSkinCtrlTestDlg::OnSetcolor() { CColorDialog dialog; dialog.m_cc.Flags |= CC_FULLOPEN | CC_RGBINIT; dialog.m_cc.rgbResult = m_crBkgnd; if (dialog.DoModal() == IDOK) { m_crBkgnd = dialog.GetColor(); CSkinCtrlMgr::SetColor(COLOR_PARENTBKGND, m_crBkgnd); CSkinCtrlMgr::RedrawAll(); } } void CSkinCtrlTestDlg::OnPropsheet() { CPropertySheet sheet; CPropPage page; sheet.AddPage(&page); sheet.DoModal(); }